/**
 * Copyright (C) 2013 DaiKit.com - daikit-commons module (admin@daikit.com)
 *
 *         Project home : http://code.daikit.com/commons
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.daikit.commons.shared.bean;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;


/**
 * Abstract bean that all modifiable beans must extend
 * 
 * @author tcaselli
 * @version $Revision$ Last modifier: $Author$ Last commit: $Date$
 */
public abstract class AbstractDkModifiableBeanWithId extends AbstractDkBeanWithId
{

	private static final long serialVersionUID = 7469420424286809266L;
	private boolean creation = false;
	private boolean dirty = false;
	private Set<String> dirtyPaths = new HashSet<String>();
	private Map<String, Set<String>> deletedChildrenIds = new HashMap<String, Set<String>>();

	// -------------------------------------------------------------------------------------------
	// ------------ METHODS
	// -------------------------------------------------------------------------------------------

	@Override
	protected StringBuilder getToStringBuilder()
	{
		final StringBuilder stringBuilder = super.getToStringBuilder();
		stringBuilder.append(",creation=").append(isCreation());
		stringBuilder.append(",dirty=").append(isDirty());
		stringBuilder.append(",dirtyPaths=").append(getDirtyPaths());
		stringBuilder.append(",deletedChildrenIds=").append(getDeletedChildrenIds());
		return stringBuilder;
	}

	// -------------------------------------------------------------------------------------------
	// ------------ GETTERS / SETTERS
	// -------------------------------------------------------------------------------------------

	/**
	 * @return the dirtyPaths
	 */
	public Set<String> getDirtyPaths()
	{
		return dirtyPaths;
	}

	/**
	 * @param dirtyPaths
	 *           the dirtyPaths to set
	 */
	public void setDirtyPaths(final Set<String> dirtyPaths)
	{
		this.dirtyPaths = dirtyPaths;
	}

	/**
	 * @return the dirty
	 */
	public boolean isDirty()
	{
		return dirty;
	}

	/**
	 * @param dirty
	 *           the dirty to set
	 */
	public void setDirty(final boolean dirty)
	{
		this.dirty = dirty;
	}

	/**
	 * @return the creation
	 */
	public boolean isCreation()
	{
		return creation;
	}

	/**
	 * @param creation
	 *           the creation to set
	 */
	public void setCreation(final boolean creation)
	{
		this.creation = creation;
	}

	/**
	 * @return the deletedChildrenIds
	 */
	public Map<String, Set<String>> getDeletedChildrenIds()
	{
		return deletedChildrenIds;
	}

	/**
	 * @param deletedChildrenIds
	 *           the deletedChildrenIds to set
	 */
	public void setDeletedChildrenIds(final Map<String, Set<String>> deletedChildrenIds)
	{
		this.deletedChildrenIds = deletedChildrenIds;
	}

}
